package com.mephi.oshs.model.entry;

import com.mephi.oshs.model.IObservable;
import com.mephi.oshs.model.Value;
import com.mephi.oshs.model.style.IStyle;

import java.util.Map;

/**
 * Данный интерфейс описывает элемент дерева ОШС.
 */
public interface IEntry extends IObservable {

    /**
     * Получить таблицу атрибутов элемента.
     *
     * @return Таблица атрибутов типа "ключ-значение".
     */
    public Map<String, Value> getAttributes();

    /**
     * Установить новый список атрибутов взамен старых.
     *
     * @param attributes Новая таблица атрибутов типа "ключ-значение".
     */
    public void setAttributes(final Map<String, Value> attributes);

    /**
     * Получить стиль описывающий данный элемент дерева ОШС.
     *
     * @return Стиль элемента.
     */
    public IStyle getStyle();

    /**
     * * Установить новый стиль описывающий данный элемент взамен старого.
     *
     * @param style Новый стиль элемента.
     */
    public void setStyle(final IStyle style);

    /**
     * Получить имя элемента, которое будет отображаться в дереве ОШС - имя узла дерева,
     * которое будет содержать данный элемент.
     *
     * @return Имя элемента.
     */
    public String getShortName();

    /**
     * Установить новое имя элемента, которое будет отображаться в дереве ОШС - имя узла дерева,
     * которое будет содержать данный элемент.
     *
     * @param shortName Новое имя элемента.
     */
    public void setShortName(String shortName);
}
